package com.example.myapplication;

import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.support.annotation.Nullable;
import android.util.Log;

public class MyService extends Service {
    public MyService() {

    }
    public class MyBinder extends Binder {
        public MyService getService(){
            return MyService.this; //返回 Service 的当前实例（就可访问 Service 中包含的数据和方法了）
        }
    }
    private MyBinder myBinder = new MyBinder();
    private String valueToShow = "我代表希望传出去的值";
    public String getValue(){return valueToShow;}

    //解绑时执行

    public boolean onUnbind(Intent intent) {
        Log.d("MyService", "散伙就散伙——onUnbind executed!");
        return super.onUnbind(intent);
    }
    //这个自定义函数代表所有的在后台默默搬砖完成任务的函数
    public String doSomeOperation(String str){
        Log.d("MyService", "收到 MainActivity 要求: " + str);
        return "谁怕谁，跟一个!";
    }
    //在服务创建时调用，创建后可以多次启动（startId 不同），详见教材 P267
//不要一行一行照抄，通过菜单 Code-->Override Methods...自动创建，快速、省输入，正确性高
    @Override
    public void onCreate() {
        super.onCreate();
        Log.d("My service", "onCreate executed!");
    }
    //服务进入活动期时执行，详见教材 P267
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        String msg = intent.getStringExtra("message");
        Log.d("My service", "onStartCommand executed!" +
                " intent: " + msg +
                ", flags: " + flags +
                ", startId: " + startId);
//此处可以设置服务处理逻辑，做不同的事，写不一样的代码
//调用 stopSelf()方法结束服务，等完成上面的学习后，输入下面被注释的代码查看结果(P271【案例 8-7】)
//stopSelf();
//调用 stopSelfResult(startId)方法结束服务是更安全的方法：若 SerVice 有更新的请求，则不会结束服务
//等完成上面的学习后，输入下面被注释的代码查看结果(P272【案例 8-8】)
//stopSelfResult(startId);
//服务与活动在同一个线程中，一般不安排耗时操作，用下面的代码体验耗时操作带来的 ANR 错误
//这里提供一个反例：下面的线程需要 20s 之久
//等完成上面的学习后，输入下面被注释的代码查看结果(P272【案例 8-9】)
//提示：只输入 Thread.sleep(20000);即可，其余异常处理等可以由 IDE 自动补全
// try {
// Thread.sleep(20000);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
        return super.onStartCommand(intent, flags, startId);
    }
    //当服务被销毁时执行
    @Override
    public void onDestroy() {
        Log.d("My service", "onDestroy executed!");
        super.onDestroy();
    }
    //创建 Service 的子类时必须要实现的方法，这里选择默认
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        String msg = intent.getStringExtra("message");
        Log.d("MyService", "绑定时收到 MainActivity intent 消息: " + msg );
        return myBinder;
    }

}